package main

import "fmt"

func main() {
	p := NewPerson("Alice", 30)
	p.Greet()
	p.SetAge(31)
	p.Greet()
}

// 定义结构体
type Person struct {
	name string
	age  int
}

func NewPerson(name string, age int) *Person {
	return &Person{name: name, age: age}
}

func (p Person) Greet() {
	fmt.Printf("Hello, my name is %s and I am %d years old.\n", p.name, p.age)
}
func (p *Person) SetAge(age int) {
	p.age = age
}

// String 方法实现了 fmt.Stringer 接口，用于自定义结构体的字符串表示形式
func (p Person) String() string {
	return fmt.Sprintf("Person[name:%s, age:%d]", p.name, p.age)
}
